﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Linq;

namespace TIT.ABDI.ChamadosTI.VWPExibirRelatorioIncidente
{
    public partial class VWPExibirRelatorioIncidenteUserControl : UserControl
    {
        SPWeb myWeb = SPContext.Current.Web;

        private DateTime dtInicio
        {
            get { return Convert.ToDateTime(Request.QueryString["dtInicio"]); }
        }

        private DateTime dtFinal
        {
            get { return Convert.ToDateTime(Request.QueryString["dtFinal"]); }
        }

        private string GrupoIncidente
        {
            get { return Request.QueryString["Incidente"]; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ExibirRelatorioIncidente();
            }
        }

        private void ExibirRelatorioIncidente()
        {
            try
            {
                var ListaChamado = myWeb.Lists["Chamado"].Items.Cast<SPListItem>()
                    .Select(p => new
                    {
                        DataModificado = p["Modificado"],
                        Status = p["Situacao"],
                        Incidente = p["Incidente"]
                    }).Where(x => Convert.ToDateTime(x.DataModificado).Date >= dtInicio
                        && Convert.ToDateTime(x.DataModificado).Date <= dtFinal
                        && x.Status.ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)[1] == "Concluído")
                    .ToList();

                var ListaIncidente = myWeb.Lists["Incidente"].Items.Cast<SPListItem>()
                    .Select(p => new
                    {
                        Incidente = p["Título"],
                        Grupo = p["IdGrupo"]
                    }).ToList();

                var ExibirRelatorio = from u in ListaChamado
                                      join j in ListaIncidente on u.Incidente.ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)[1] equals j.Incidente into NovaFonte
                                      from i in NovaFonte.Where(i => i.Grupo.ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)[1] == GrupoIncidente)
                                      group i by i.Incidente into g
                                      select new
                                      {
                                          Incidente = GrupoIncidente + " - " + g.Key,
                                          Quantidade = g.Count()
                                      };

                rptExibirRelatorioIncidente.DataSource = ExibirRelatorio;
                rptExibirRelatorioIncidente.DataBind();
            }
            catch (Exception e)
            {
                Response.Write("Erro ao Exibir Relatório de Incidentes. Erro:" + e.Message);
            }
        }
    }
}
